// pages/cart/cart.js
Page({
  //1. 编辑按钮的分析
  //   1.1 点击编辑，切换编辑按钮的文字
  //    1.1.1 编辑按钮的字需要提取出来，作为一个变量<button>{{editText}}</button>
  //    1.1.2 在切换文字时，要做一个判断，当前是编辑还是完成状态，根据不同状态，给editText不同内容
  //  1.2 控制结算和删除的显示或者隐藏
  //    1.2.1 通过编辑的文字，直接在wxml页面控制结算和删除按钮的显示和隐藏

  //2. 获取本地数据，进行页面渲染，因为onLoad只加载一次，所以在onShow里面获取本地数据
  //因为onShow可以多次加载

  //3.全选按钮
  //  3.1 点击时，控制自己的选中与非选中，也就是动态修改allChecked
  //  3.2 同时,所有商品前面的单选按钮需要与allChecked保持一致

  //4.商品前的单选按钮
  //  4.1 控制自己的选中状态
  //  4.2 再点击时，点击中的radio索引值传递过来，拿到索引值才可以操作数组里的第几项的singleChecked
  //  4.3 商品前的按钮只要一个是不选中，则全选按钮不选中，如商品的按钮都是选中，那么全选按钮才选中
  /**
   * 页面的初始数据
   */
  data: {
    editText: "编辑",
    //控制全选按钮的选中状态
    allChecked: false,
    //商品列表数据
    cartList: [],
    //总价格
    allPrice:0
  },

//封装计算总价的函数
getAllPrice(){
  var price = 0;
  //取出所有商品
  var arrList = this.data.cartList;
  arrList.forEach((v, i) => {
    if (v.singleChecked) {
      price += v.num * v.price
    }
  })
  console.log(price);
  this.setData({
    allPrice: price
  })
},

  //4.商品前的单选按钮
  //  4.1 控制自己的选中状态
  //  4.2 再点击时，点击中的radio索引值传递过来，拿到索引值才可以操作数组里的第几项的singleChecked
  //  4.3 商品前的按钮只要一个是不选中，则全选按钮不选中，如商品的按钮都是选中，那么全选按钮才选中
  handleSingleCheck(e) {
    //获取到点击按钮的索引值
    var index =e.currentTarget.dataset.index;
    var arr =this.data.cartList;
    //修改自己的选中状态
      arr[index].singleChecked = !arr[index].singleChecked
    //把修改好的arr写入data里面的cartList
    this.setData({
      cartList:arr
    });
    //反正法
    //假设全选按钮是选中
    var flag =true;
    //验证假设 遍历cartList数组，判断每个商品前面的按钮是不是选中
    var arr =this.data.cartList;
    arr.forEach((v,i)=>{
      if(v.singleChecked==false){
        //证明出现一个不选中的商品
        //推翻假设
        flag=false;
        return;
      }
    })
    //通过假设的结果来决定全选按钮是否选中
    // if(flag){
    //   //flag为true 则证明所有商品都是选中
    //   this.setData({
    //     allChecked:true
    //   })
    // }else{
    //   //flag为true 则证明存在其中一个商品是不选中，那么全选就为false
    //   this.setData({
    //     allChecked: false
    //   })
    // }
    this.setData({
      allChecked: flag
    })
    //调用计算总价的函数
  this.getAllPrice()
    
  },




  //3.全选按钮
  //  3.1 点击时，控制自己的选中与非选中，也就是动态修改allChecked
  //  3.2 同时,所有商品前面的单选按钮需要与allChecked保持一致
  handleAllChecked() {
    console.log(11);
    //修改自己的选中状态
    var allChecked = !this.data.allChecked
    this.setData({
      allChecked
    })
    //修改所有商品前面的单选按钮
    var arr = this.data.cartList
    arr.forEach((v,i)=>{
      //v:代表所遍历的数组的每一项， i:数组的每一个索引
      v.singleChecked =allChecked
    })
    this.setData({
      cartList:arr
    })
    //调用计算总价的函数
    this.getAllPrice()
  },
//遍历cartList，如果里面cartList的数据，如果每项的check属性为true的值的个数和总格式
 
  //handleEdit 处理编辑按钮的函数
  handleEdit() {
    // if (this.data.editText == "编辑"){
    //   var text = "完成"
    // }else{
    //   var text = "编辑"
    // }
    //先判断当前按钮的文字，在进行赋值
    var text = this.data.editText == "编辑" ? "完成" : "编辑"
    this.setData({
      editText: text
    })
  },
  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function(options) {

  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady: function() {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function() {
    wx.getStorage({
      key: 'cartList',
      success: (res) => {
        console.log(res)
        this.setData({
          cartList: res.data
        })
      },
    })
  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide: function() {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload: function() {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh: function() {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom: function() {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage: function() {

  }
})